[Lightwave] SK_EdgeLengthSum スクリプト

概要

LightwaveのModeler用Python Scriptです。

選択されているエッジの長さの合計を計算します。

使い方

長さを求めたいエッジを選択してSK_EdgeLengthSumを実行します。

ソースコード

#! /usr/bin/env python
# -*- Mode: Python -*-
# -*- coding: ascii -*-

"""
Calculates the total length of the selected edges
"""

import lwsdk, math

__author__      = "Makoto Sekiguchi"
__date__        = "Aug 17 2025"
__copyright__   = "Copyright (C) 2025 narudesign"
__version__     = "0.9"
__maintainer__  = "Makoto Sekiguchi"
__status__      = "Release"
__lwver__       = "11"

class edgeLengthSum(lwsdk.ICommandSequence):
    def __init__(self, context):
        super(edgeLengthSum, self).__init__()
        
    def fast_edge_scan(self, edge_list, edge_id):
        edge_list.append(edge_id)
        return lwsdk.EDERR_NONE
        
    def get_distance(self, p1, p2):
        return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2 + (p1[2] - p2[2])**2)
        
    def process(self, mod_command):
        selectedEdge = []
        dist = 0
        
        mc = mod_command
        
        meo = mc.editBegin(0, 0, lwsdk.OPSEL_DIRECT)
        
        edgeCount = meo.edgeCount(meo.state, lwsdk.OPLYR_FG, lwsdk.EDCOUNT_SELECT)
        
        if edgeCount < 1:
            meo.done(meo.state, lwsdk.EDERR_NONE, 0)
            lwsdk.LWMessageFuncs().error("Please select 1 or more edges", "")          
            return lwsdk.AFUNC_OK
        
        eo_r = meo.fastEdgeScan(meo.state, self.fast_edge_scan, (selectedEdge,), lwsdk.OPLYR_FG, 1)
        
        for n in range(len(selectedEdge)):
            po1 = meo.edgePoint1(meo.state, selectedEdge[n])
            po2 = meo.edgePoint2(meo.state, selectedEdge[n])
            
            p1 = meo.pointPos(meo.state, po1)
            p2 = meo.pointPos(meo.state, po2)
            
            dist += self.get_distance(p1, p2)
            
        meo.done(meo.state, lwsdk.EDERR_NONE, 0)
        
        dist_formatted = "{:.4f}".format(dist)
        
        ui = lwsdk.LWPanels()
        panel = ui.create("SK_EdgeLengthSum")
        panel.setw(240)
        panel.seth(120)
        
        panel.ctl_nof_edges = panel.int_ctl("Selected edge")
        panel.ctl_nof_edges.set_int(len(selectedEdge))
        panel.ctl_nof_edges.set_w(170)
        panel.ctl_nof_edges.move(10, 10)
        
        panel.input_text = panel.str_ctl("Edge length sum", 15)
        panel.input_text.set_str(dist_formatted)
        panel.input_text.set_w(170)
        panel.input_text.move(10, 40)
        
        if panel.open(lwsdk.PANF_CANCEL) == 0:
            ui.destroy(panel)
        
        return lwsdk.AFUNC_OK

ServerTagInfo = [
    ("SK_EdgeLengthSum", lwsdk.SRVTAG_USERNAME | lwsdk.LANGID_USENGLISH ),
    ("SK_EdgeLengthSum", lwsdk.SRVTAG_BUTTONNAME | lwsdk.LANGID_USENGLISH )
]
ServerRecord = {
    lwsdk.CommandSequenceFactory("SK_EdgeLengthSum", edgeLengthSum) : ServerTagInfo
}

ダウンロード

未コンパイルPythonScript(.py)

履歴

  • ver.0.90 (2025/08/22)
    • 公開

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です