entmake动态生成带弧度的填充实体时遇到的问题求助,谢谢~
本帖最后由 逗亦斗霸 于 2024-9-25 18:14 编辑(defun c:tt (/ p0)
(setq p0 (getpoint "\n起点: ")
pn (getpoint p0 "\n终点: ")
jd (angle p0 pn)
p1 (mapcar '+ p0 '(420 0 0) )
p2 (mapcar '+ p0 '(0 -210 0) )
jd1 (angle p0 p2)
)
(setq
pt1(polar p0 jd 420)
pt2(polar p0 (+ jd jd1) 210)
pt3(polar pt2 jd 420)
)
(entmake
(list
'(0 . "hatch")
'(100 . "AcDbEntity")
'(67 . 0)
'(410 . "Model")
(cons 8 "0")
'(100 . "AcDbHatch")
'(10 0.0 0.0 0.0)
'(210 0.0 0.0 1.0)
(cons 2 "SOLID")
'(70 . 1)
'(71 . 1)
'(91 . 1)
'(92 . 1)
'(93 . 3)
'(72 . 1)
(cons 10 p0)
(cons 11 pt1)
'(72 . 2)
(cons 10 pt3)
'(40 . 210)
(cons 50 (+ (* pi (/ jd 180.) ) (/ pi 2) ) )
(cons 51 (+ (* pi (/ jd 180.) ) pi) )
'(73 . 1)
'(72 . 2)
(cons 10 pt2)
'(40 . 210)
(cons 50 (+ (* pi (/ jd 180.) ) (* pi 2) ) )
(cons 51 (+ (* pi (/ jd 180.) ) (* pi 2.5) ) )
'(73 . 1)
'(97 . 0)
'(75 . 1)
'(76 . 1)
'(98 . 1)
(cons 10 p0)
'(453 . 2)
'(463 . 0)
'(463 . 1)
'(470 . "LINEAR")
)
)
(princ)
)此代码水平零角度时可以正常生成我想要的填充样式(图1),但当有角度时则会出现异样(图2和图3),问题应该是出在DXF组码50和51,尝试修改却未成功,现请求大佬指点一下怎么修改?谢谢~ 本帖最后由 飞雪神光 于 2024-9-29 09:03 编辑
@统一网名 回复的就是一种答案 我换掉了command(defun c:tt (/ an lastobj num p0 p1 pt pt1 pt2 pt3)
(setq
p0 (getpoint "\n起点:")
pt (getpoint p0 "\n终点:")
num (getint "\n生成数量:<1>")
pt1(polar p0 0 420)
pt2(polar p0 (* pi 1.5) 210)
pt3(polar pt2 0 420)
)
(or num (setq num 1))
(entmake
(list
'(0 . "hatch")
'(100 . "AcDbEntity")
'(67 . 0)
'(410 . "Model")
(cons 8 "0")
'(100 . "AcDbHatch")
'(10 0.0 0.0 0.0)
'(210 0.0 0.0 1.0)
(cons 2 "SOLID")
'(70 . 1)
'(71 . 1)
'(91 . 1)
'(92 . 1)
'(93 . 3)
'(72 . 1)
(cons 10 p0)
(cons 11 pt1)
'(72 . 2)
(cons 10 pt3)
'(40 . 210)
(cons 50 (* pi 0.5))
(cons 51 pi)
'(73 . 1)
'(72 . 2)
(cons 10 pt2)
'(40 . 210)
(cons 50 (* pi 2.))
(cons 51 (* pi 2.5))
'(73 . 1)
'(97 . 0)
'(75 . 1)
'(76 . 1)
'(98 . 1)
(cons 10 p0)
'(453 . 2)
'(463 . 0)
'(463 . 1)
'(470 . "LINEAR")
)
)
(vla-Rotate (setq lastobj (vlax-ename->vla-object (entlast))) (vlax-3D-point p0) (setq an (angle p0 pt)))
(repeat (1- num)
(setq p1 (polar p0 an 420));间距
(vla-Move (setq lastobj (vla-Copy lastobj)) (vlax-3D-point p0) (vlax-3D-point p1))
(setq p0 p1)
)
(princ)
)
没有搞明白是咋运行的,但是换个思路可以实现,先平行画一个,然后旋转就可以了。
[*](defun c:tt (/ ang jd jd1 p0 p1 p2 pn pt pt1 pt2 pt3)
[*](setq
[*] p0 (getpoint "\n起点: ")
[*] pt (getpoint p0 "\n终点: ")
[*])
[*](setq
[*] pn (polar p0 0 300)
[*] jd (angle p0 pn)
[*] p1 (mapcar '+ p0 '(420 0 0) )
[*] p2 (mapcar '+ p0 '(0 -210 0) )
[*] jd1 (angle p0 p2)
[*])
[*](setq
[*] pt1(polar p0 jd 420)
[*] pt2(polar p0 (+ jd jd1) 210)
[*] pt3(polar pt2 jd 420)
[*])
[*](entmake
[*] (list
[*] '(0 . "hatch")
[*] '(100 . "AcDbEntity")
[*] '(67 . 0)
[*] '(410 . "Model")
[*] (cons 8 "0")
[*] '(100 . "AcDbHatch")
[*] '(10 0.0 0.0 0.0)
[*] '(210 0.0 0.0 1.0)
[*] (cons 2 "SOLID")
[*] '(70 . 1)
[*] '(71 . 1)
[*] '(91 . 1)
[*] '(92 . 1)
[*] '(93 . 3)
[*] '(72 . 1)
[*] (cons 10 p0)
[*] (cons 11 pt1)
[*] '(72 . 2)
[*] (cons 10 pt3)
[*] '(40 . 210)
[*] (cons 50 (+ (* pi (/ jd 180.) ) (/ pi 2) ) )
[*] (cons 51 (+ (* pi (/ jd 180.) ) pi) )
[*] '(73 . 1)
[*] '(72 . 2)
[*] (cons 10 pt2)
[*] '(40 . 210)
[*] (cons 50 (+ (* pi (/ jd 180.) ) (* pi 2) ) )
[*] (cons 51 (+ (* pi (/ jd 180.) ) (* pi 2.5) ) )
[*] '(73 . 1)
[*] '(97 . 0)
[*] '(75 . 1)
[*] '(76 . 1)
[*] '(98 . 1)
[*] (cons 10 p0)
[*] '(453 . 2)
[*] '(463 . 0)
[*] '(463 . 1)
[*] '(470 . "LINEAR")
[*] )
[*])
[*](setq ang(- 360 (* (- (angle p0 pn)(angle p0 pt))(/ 180 pi))))
[*](command "_.rotate" (entlast) "" p0 ang )
[*](princ)
[*])
逗亦斗霸 发表于 2024-9-26 14:45
恩恩,用command偶会哦,我就是想学用entmake的,那个快呀~
哪个快我也不知道,更改以下代码,你原来的就可以正常运行了
(cons 50 (+ jd (/ pi 2.0)))
(cons 51 (+ jd pi))
(cons 50 (+ jd (* pi 2.0)))
(cons 51 (+ jd (* pi 2.5))) 统一网名 发表于 2024-9-26 08:56
没有搞明白是咋运行的,但是换个思路可以实现,先平行画一个,然后旋转就可以了。
感谢回复!单独一个的这样确实可以,但我想生成多个的话((entlast) 换成“p”)没有旋转成功。另外我用command来填充的话也可以成功,但数量多的话使用command生成确实要慢不少~ 逗亦斗霸 发表于 2024-9-26 10:49
感谢回复!单独一个的这样确实可以,但我想生成多个的话((entlast) 换成“p”)没有旋转成功。另外我 ...
不明白你说的多个具体是啥情况 统一网名 发表于 2024-9-26 11:24
不明白你说的多个具体是啥情况
沿着起点和终点路径生成多个~
逗亦斗霸 发表于 2024-9-26 11:28
沿着起点和终点路径生成多个~
(repeat 2
(setq d2 (polar p0 (angle p0 pt)440))
(command "copy" (entlast) "" p0 d2);
(setq p0 d2)
)
后面加一个循环复制,次数和间距自己设置吧 统一网名 发表于 2024-9-26 13:54
(repeat 2
(setq d2 (polar p0 (angle p0 pt)440))
(command "copy" (entlast) "" p0 d2);
恩恩,用command偶会哦,我就是想学用entmake的,那个快呀~ 飞雪神光 发表于 2024-9-29 09:01
@统一网名 回复的就是一种答案 我换掉了command
感谢飞版!这就是我想要的,之前的指北角度问题和这个问题都是不会用pi(这段代码里的pi其实也没看太懂:D-)我再去琢磨一下~
页:
[1]
2