马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
如下图,第一张为选两边标注形式,第2张图为选取三点标注形式。我想实现标注三点,但是效果为第一张图的形式,请问各位如何解决呢?
多谢大家帮忙!
已解决,下面放上写的代码
[sell=5]里面有开心 通用函数,涉及到内容可以自行写出来,都不复杂,[/sell];******************************************************************************
 - (defun c:pljdbz ( / GETK EPbl scl ss3 sspline sclbz anglepi i_ent pl_i pt_lst
- pt_n k pt_1 pt_2 pt_13 pt_14 e1)
- (vl-load-com)
- (Lionel:str)
- (Lionel:err)
- (setvar "osmode" 0)
- (initget "D S")
- (setq GETK (getkword "确定比例:\n [点选图框(D)/直接输入比例(S)]: <D> "))
- (cond
- ((or (= GETK "D") (= GETK nil))
- (progn
- (setq EPbl (entsel"<点选图框确定比例>:\n"))
- (setq scl (cdr (assoc 41 (entget (car EPbl)))))
- );endprogn
- )
- ((= GETK "S")
- (setq scl (atof (getstring "\n请输入比例:")))
- )
- );endcond
- (setq sspline (ssget '((0 . "lwpolyline"))))
- (initget "Y N")
- (setq GETK (getkword "是否需要输入偏移距离:\n [是(Y)/否(N)]: <N> "))
- (cond
- ((or (= GETK "N") (= GETK nil))
- (setq sclbz (* scl 11))
- )
- ((= GETK "Y")
- (setq sclbz (atof (getstring "\n请输入标注偏移距离:")))
- )
- );endcond
- (setq i_ent 0)
- (if i_name
- (setq i_name i_name)
- (setq i_name 0)
- )
- (setq ss_bz '())
- (setq ss_bz (ssadd))
- (repeat (sslength sspline)
- (setq pl_i (ssname sspline i_ent))
- (setq pt_lst (reverse (XX-Get-Pline-Pt pl_i)))
- (setq pt_lst (append pt_lst (list (car pt_lst) (cadr pt_lst))))
- (setq pt_n (length pt_lst))
- (setq k 0)
- (repeat (- pt_n 2)
- (setq pt_1 (nth k pt_lst))
- (setq pt_2 (nth (1+ k) pt_lst))
- (setq pt_3 (nth (+ k 2) pt_lst))
- (setq pt_13 (polar pt_2 (angle pt_2 pt_1) sclbz))
- (setq pt_14 (polar pt_2 (angle pt_2 pt_3) sclbz))
- (if (or (equal (XX-Get-3PtAngle pt_1 pt_2 pt_3) (* pi 0.5) 0.00000001)
- (equal (XX-Get-3PtAngle pt_1 pt_2 pt_3) (* pi 1.5) 0.00000001)
- )
- T
- (if (>= (XX-Get-3PtAngle pt_1 pt_2 pt_3) pi)
- (gm_AddDim3PointAngular pt_14 pt_2 pt_13 pt_13)
- (gm_AddDim3PointAngular pt_13 pt_2 pt_14 pt_13)
- )
- )
- (setq e1 (entlast))
- (ssadd e1 ss_bz)
- (setq k (1+ k))
- );endrepeat
- (setq i_ent (1+ i_ent))
- );endrepeat
- (XX-Mk-Block-Insert ss_bz pt_1 (strcat "标注" (itoa (1+ i_name))))
- (setq i_name (1+ i_name))
- (setvar "osmode" osmode_old)
- (princ)
- );enddefun;******************************************************************************
- (defun Lionel:str ()
- (setq dynmode_old (getvar "dynmode"))
- (setq cmdecho_old (getvar "cmdecho"))
- (setq osmode_old (getvar "osmode"))
- )
- ;******************************************************************************
- (defun Lionel:err()
- (if (boundp *error*) (setq Old_err *error*))
- (defun *error* (msg)
- (if (not (member msg
- (list "console break" "Function cancelled" "quit / exit abort" "函数被取消")))
- (princ (strcat "错误:" msg "\n") )
- (princ)
- );if
- (if (boundp 'cmdecho_old) (setvar "cmdecho" cmdecho_old) )
- (if (boundp 'osmode_old) (setvar "osmode" osmode_old) )
- (if (boundp 'dynmode_old) (setvar "dynmode" dynmode_old) )
- (command "_.undo" "_e")
- (setq *error* Old_err Old_err nil)
- (princ)
- );defun *error*
- );defun
|