如何在直线两段生成小点点
问题如图所示,求大佬告知!!!本帖最后由 mituzhe 于 2022-8-9 14:47 编辑
重新复制了一遍代码,顺便了解了怎么添加代码区域,哈哈
;-------------------------------------------------------------------------------------------------
;直线端点标记
(defun c:tt1 (/ ang line_ctrl_pts lyr pt1 pt2 ss_line)
(setq ss_line (ssget '((0 . "LWPOLYLINE,LINE"))))
(foreach ent (xyp-Ss2List ss_line)
(setq line_ctrl_pts (gd-getCtrlPt ent)
lyr (vla-get-layer (vlax-ename->vla-object ent))
)
(if (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
(progn
; (setq line_ctrl_pts (mapcar '(lambda (pt) (append pt '(0.0)))
; line_ctrl_pts
; )
; )
(setq line_ctrl_pts (mapcar 'list line_ctrl_pts (cdr line_ctrl_pts)))
)
)
(foreach pts line_ctrl_pts
(setq pt1 (nth 0 pts)
pt2 (nth 1 pts)
ang (angle pt1 pt2)
)
(entmake
(mapcar 'cons '(0 8 62 10 11) (list "LINE" lyr 2 pt1 (polar pt1 ang 1)))
)
(entmake
(mapcar 'cons
'(0 8 62 10 11)
(list "LINE" lyr 2 pt2 (polar pt2 (+ ang PI) 1))
)
)
)
(entdel ent)
)
(princ)
)
(defun xyp-Ss2List (ss / i s1 lst)
(and ss
(setq i -1)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq lst (cons s1 lst))
)
)
lst
)
(defun gd-getCtrlPt (ent / ctrlPt_lst)
; (setq ctrlPt_lst nil)
(setq ctrlPt_lst (append
(vl-remove-if-not
'(lambda (x) (or (= 11 (car x)) (= 10 (car x))))
(entget ent)
)
ctrlPt_lst
)
)
; (print ctrlPt_lst)
(mapcar 'cdr ctrlPt_lst)
)
点是没有方向的,你要的小点点是不是一个长度为1mm的多段线或者块参照,起点是直线的端点,止点指向另一端? 你这个 先求端点坐标 然后 polar 求另一点然后画直线改为黄色 计算两次即可 本帖最后由 世人皆醉 于 2022-8-5 14:01 编辑
llsheng_73 发表于 2022-8-5 11:23
点是没有方向的,你要的小点点是不是一个长度为1mm的多段线或者块参照,起点是直线的端点,止点指向另一端 ...
就是个一毫米的线,对的,就是起点是直线的端点,指点是指向另一端
你这是要弄打标线吗?两个端部不需要先往内部缩进个0.5后 再画1mm的线吗? 本帖最后由 mituzhe 于 2022-8-5 16:34 编辑
;-------------------------------------------------------------------------------------------------
;直线端点标记
(defun c:tt1 (/ ang line_ctrl_pts pt1 pt2 ss_line)
(setq ss_line (ssget'((0 . "*LINE"))))
(foreach ent (xyp-Ss2List ss_line)
(setq line_ctrl_pts (gd-getCtrlPt ent)
pt1 (nth 0 line_ctrl_pts)
pt2 (nth 1 line_ctrl_pts)
ang (angle pt1 pt2)
)
(entmake
(list (cons 0 "LINE")
(cons 62 2)
(cons 10 pt1)
(cons 11 (polar pt1 ang 1))
)
)
(entmake
(list (cons 0 "LINE") (cons 62 2) (cons 10 pt2) (cons 11 (polar pt2 (+ ang PI) 1)))
)
(entdel ent)
)
(princ)
)
(defun xyp-Ss2List (ss / i s1 lst)
(and ss
(setq i -1)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq lst (cons s1 lst))
)
)
lst
)
(defun gd-getCtrlPt (ent / ctrlPt_lst)
; (setq ctrlPt_lst nil)
(setq ctrlPt_lst (append
(vl-remove-if-not
'(lambda (x) (or (= 11 (car x)) (= 10 (car x))))
(entget ent)
)
ctrlPt_lst
)
)
; (print ctrlPt_lst)
(mapcar 'cdr ctrlPt_lst)
) xj6019 发表于 2022-8-5 15:05
你这是要弄打标线吗?两个端部不需要先往内部缩进个0.5后 再画1mm的线吗?
不需要的,直接从端点尾部开始的
mituzhe 发表于 2022-8-5 15:07
;----------------------------------------------------------------------------------------------- ...
试试这个能不能满足你的要求 其实如果只是想要标记顶点位置。可以单独画 点(POINT)图元,可以标记出所有顶点。目前我这个代码,对多段线折线,只能计算第一段,但如果标记点,稍微修改能标记所有位置