marmo 发表于 2022-7-6 10:22:08

帮助命令部分:区域

您好:电击:
 
问题:
我通常使用comand剖面或剖面从三维模型中绘制二维图形。
我知道yuo可以使用命令sectionplane生成2d剖面块,但所有实体都放置在第0层。
使用命令部分,输出区域放置在当前层上。
想法:
可以基于命令SECTON(无SECTIONPLANE)创建lisp,以便在不同截面实体的同一层上具有区域。
 
因此,您可以研究由不同层组成的三维对象,并根据更复杂的标准(例如,根据不同的材料组织)将二维截面组织到不同的层中。
请求:
有人Lisp程序?还是有人可以开发它?
 
谢谢大家为这个伟大的网站!!!!
 
马可

marmo 发表于 2022-7-6 10:36:38

可能吗?

jammie 发表于 2022-7-6 10:47:48

嘿Marco
 
应该可以通过lisp例程实现这一点。
 
基本上,您需要创建一个三维实体的选择集,并拾取提供截面边界的3个点。迭代选择集。实体对象具有vla SectionSolid方法,该方法可以基于拾取点生成区域,您可以更改该区域以匹配源对象
 
你有自己编写的代码可以发布吗?
 
当做
 
杰米

marmo 发表于 2022-7-6 10:55:48

嗨,吉米!
 
我不懂lisp语言。。。我正在学习,但现在我只能写宏命令。。。

jammie 发表于 2022-7-6 11:04:21

作为一个起点,这可能是有用的。它还没有经过严格测试。此外,它没有考虑可能被锁定的层
 
 
(defun c:foo (/ tempSelectionSet pt1 pt2 pt3 i sourceObject sourceLayer acdbMarker)

(if

(and
   (setq tempSelectionSet (ssget (list (cons 0 "3dSolid"))))
   (setq pt1 (getpoint "\nSpecify first point on Section plane:"))
   (setq pt2 (getpoint pt1 "\nSpecify second point on plane: "))
   (setq pt3 (getpoint pt1"\nSpecify third point on plane:"))
   )

(progn

   (setq i 0)

   (repeat

   (sslength tempSelectionSet)
   
   (setq sourceObject (vlax-ename->vla-object (ssname tempSelectionSet i)))

   (setq acdbMarker(entlast)
    sourceLayer (vla-get-layer sourceObject)
    i (1+ i))

   (vla-SectionSolid
sourceObject
(vlax-3d-point pt1)
(vlax-3d-point pt2)
(vlax-3d-point pt3)
            )
   (while
(setq acdbMarker (entnext acdbMarker))
(vla-put-layer (vlax-ename->vla-object acdbMarker) sourceLayer)
   )))))

marmo 发表于 2022-7-6 11:20:55

嗨Jammie!
 
Lisp程序是完美的!!!
简单、快速、实用。
适用于复杂模型!
非常感谢你!
当做
马可

jammie 发表于 2022-7-6 11:29:42

 
很高兴帮助马尔默!
 
我不经常接触固体,所以这对我来说也是一个很好的学习曲线
 
当做
 
杰米
页: [1]
查看完整版本: 帮助命令部分:区域