オフセットしたパスによる柱状体

ホーム フォーラム マリオネット オフセットしたパスによる柱状体

1件の返信スレッドを表示中
  • 投稿者
    投稿
    • #9466
      onoken_ota
      参加者

      (すみません、編集している内にスパム扱いになってしまったため再投稿してみます。)

      いつもありがとうございます。昨日はバーチャル展示場にてお話できてとても楽しかったです。

      早速ですが、質問させてください。(マリオネットではなくてプラグインオブジェクトに関してですが。)

      2Dパスオブジェクトにて、パスを取得し、そのパスをオフセットしたものを利用して複数の多段柱状体を作成したいといろいろ試しているのですが、柱状体が生成できずにいます。

      コードは

      #---------------------------------------
      import vs
      (b, objName, rhh, recHd, wallHd) = vs.GetCustomObjectInfo()	 # rhhはシンボル本体のハンドル
      if b:
      		
      	# ----------------------------------------------------------
      	# script-----------------------------------------------------
      	# ----------------------------------------------------------
      	
      	phd = vs.GetCustomObjectPath(rhh)
      	phd0 = vs.CreateDuplicateObject(phd,vs.Handle(0)) #ベースのパス
      	
      	vs.BeginXtrd(0,300)
      	phd1 = vs.CreateOffsetNurbsObjectHandle(phd0, -100) #オフセットしたパスの生成
      	vs.SetSelect(phd1)
      	vs.Duplicate(50,0)
      	vs.EndXtrd()
      		
      	vs.BeginXtrd(0,500)
      	phd1 = vs.CreateOffsetNurbsObjectHandle(phd0, -200)
      	vs.SetSelect(phd1)
      	vs.Duplicate(50,0)
      	vs.EndXtrd()
      	
      	#vs.DelObject(phd0) #←最終的には	phd0 は削除予定
      #---------------------------------------

      としてみましたが、phd0は表示されますが、多段柱状体は表示されない状況です。(windows10 VW2021環境)
      パスの内側にオフセットした柱状体が2つ生成される、はずなのですが・・・。

      確信はないですが、BeginXtrd~EndXtrdの中で使用する2D図形の対象となる場合とならない場合があるような気がしたのですが、そのルールが理解できていません。

      (また、CreateDuplicateObject(phd,vs.Handle(0))のところは、他のところで見つけたコードですが、Handle(0)やコンテナの概念が理解できてないです。別のスクリプトでオブジェクトのパスから多段柱状体を生成する際にこれを挟まないとうまくいかなかったため、挟んでみています。この辺の構造に関係ありそうな気はするのですが。)

      もし、ここをなおせば、多段柱状体が表示されるよ、というのを教えていただけると非常に助かります。

      よろしくお願いいたします。

    • #9467
      onoken_ota
      参加者

      すみません、自己解決しました。
      試行錯誤中にOffsetPolyNでうまくいかなかったのでCreateOffsetNurbsObjectHandleを使っていました。

      改めて、
      ・事前にOffsetPolyNでオフセット図形作成
      ・BeginMXtrdのあとに上記図形をCreateDuplicateObjectで複製配置
      ・最初のオフセット図形を削除
      としてみたところ、うまくいきました。
      (なぜ、複製配置が必要なのか理解できていないですが。)

      #---------------------------------------
      import vs
      (b, objName, rhh, recHd, wallHd) = vs.GetCustomObjectInfo()	 # rhhはシンボル本体のハンドル
      if b:
      		
      	# ----------------------------------------------------------
      	# script-----------------------------------------------------
      	# ----------------------------------------------------------
      	
      	phd = vs.GetCustomObjectPath(rhh)
      	phd0 = vs.CreateDuplicateObject(phd,vs.Handle(0)) #ベースのパス
      	
      	
      	phd11 = vs.OffsetPolyN(phd0, -100,True) 
      	vs.BeginMXtrd(0,300)
      	phd1 = vs.CreateDuplicateObject(phd11,vs.Handle(0))
      	vs.SetSelect(phd1)
      	vs.Duplicate(50,0)
      	vs.EndMXtrd()
      	vs.DelObject(phd11)
      	
      	phd11 = vs.OffsetPolyN(phd0, -300,True)
      	vs.BeginMXtrd(0,500)
      	phd1 = vs.CreateDuplicateObject(phd11,vs.Handle(0))
      	vs.SetSelect(phd1)
      	vs.Duplicate(50,0)
      	vs.EndMXtrd()
      	vs.DelObject(phd11)
      	
      	vs.DelObject(phd0) 
      #---------------------------------------
      • #9468
        木原 和信
        参加者

        onoken ota様

        大変お世話になっております。研究開発部です。

        先日はバーチャル展示にご参加いただきありがとうございました。またフォーラムへのご投稿もありがとうございます。マリオネットに限らず、スクリプト、プラグインの疑問解決にご活用ください。

         

        ご質問の件、ご解決されたようで安心いたしました。

        2Dパス形式のプラグインオブジェクトで定義するパス図形では、図形の加工や属性情報の取得に一部制限がある場合があります。柱状体のプロファイル用図形のように、専用の作図空間を持っていて、その作図空間では機能が制限されているのと同じイメージです。

        ただ、その制限の範囲が開発元から公開されていませんので、やってみてダメだったら別の方法を試すというのが現状です。

        パス図形を複製することによって独立した図形となりますので、図形の加工に制限がなくなります。ですので、一旦複製して加工したあとで不要なものを削除するという手法が多く見られます。

         

        「OffsetPolyN」関数につきましては複製を伴う加工ですので、パス図形を直接使用することができます。パス図形を引数に指定すればあとで削除する必要がありませんのでお試しください。

        #---------------------------------------
        import vs
        (b, objName, rhh, recHd, wallHd) = vs.GetCustomObjectInfo() # rhhはシンボル本体のハンドル
        if b:
        	# ----------------------------------------------------------
        	# script-----------------------------------------------------
        	# ----------------------------------------------------------
        	
        	phd = vs.GetCustomObjectPath(rhh)
        	
        	vs.BeginMXtrd(0,300)
        	phd11 = vs.OffsetPolyN(phd, -100,True)
        	vs.SetSelect(phd11)
        	vs.Duplicate(50,0)
        	vs.EndMXtrd()
        	
        	vs.BeginMXtrd(0,500)
        	phd11 = vs.OffsetPolyN(phd, -300,True)
        	vs.SetSelect(phd11)
        	vs.Duplicate(50,0)
        	vs.EndMXtrd()
        #---------------------------------------

        上記コードで作成したオブジェクトのイメージを添付いたします。

        以上となります。ご参考になりましたら幸いです。

1件の返信スレッドを表示中
  • このトピックに返信するにはログインが必要です。