TheyCallMeJohn 发表于 2022-7-6 06:14:28

动态块位置信息

大家好,
好的,我有一个动态块(在我的例子中是绿色的),它构建在x-y平面上。我可以改变它的长度,宽度,延伸它,围绕基点旋转它。雅达雅达雅达。我工作的公司需要的一系列功能。当我们将其插入3D模型时,我们将其定位,使Y轴成为Z轴,X轴可以位于X-Y平面内的任何位置。我试图创建一个lisp,将其相对于第二个块(在我的示例中为红色)移动。有人知道获取动态块旋转信息的方法吗。我不能使用misc部分的“旋转”,因为它在块x-y平面而不是模型x-y平面中操作。
 
我在下面用Axis创建了一个图像。希望能够澄清。这些不是实际的块,只是示例形状。
 
希望有人能帮忙。我试过几件事都没有成功。
 

TheyCallMeJohn 发表于 2022-7-6 07:06:45

好的,在做了更多的研究之后,我想我需要得到每个对象的变换矩阵。这显然可以使用“nentselp”获得,但有没有办法使用它来获得一组动态块实体的一批转换对象?Nentselp似乎只接受选择点。

TheyCallMeJohn 发表于 2022-7-6 07:41:16

如果有人想做类似的事情。。。这是我cam编写的代码的一部分。希望这对将来的人有所帮助。还可以修改动态块的配置方式,动态块编辑器中的Z轴将成为构成“法线”值的单位向量的参考。所以我必须把单位向量绕z轴旋转90度。
 

(setq pl_set (ssget '((0 . "INSERT"))))
(setq pl_set_lgth (SSLENGTH pl_set))
(setq br_item 0)
(repeat pl_set_lgth
        (setq en (SSNAME pl_set br_item))               
        (setq entvla (vlax-Ename->Vla-Object en))
        (setq unitVec (vlax-get entvla 'normal))
        (setq InsrtPnt (vlax-get entvla 'InsertionPoint))
        (if (getdynpropvalue entvla "BRCKT_ELEV X")
                (progn
                        (setq brace_dist (abs (getdynpropvalue entvla "BRCKT_ELEV X")))
                        (princ "\n unitVec is:") ;to be removed
                        (princ unitVec) ;to be removed
                        (setq i_val (car unitVec))
                        (setq j_val (cadr unitVec))
                        (setq i_val_n (* 1.0 j_val))
                        (setq j_val_n (* -1.0 i_val))
                        (setq z_rot_rad (atan j_val_n i_val_n))
页: [1]
查看完整版本: 动态块位置信息