你好
我有一些我试图修改的代码。该代码将用全局宽度标记LWpolyline。
- (vl-load-com)
- (defun c:Label_Width ( / js htx AcDoc Space nw_style obj dxf_ent ename t_mod key pr t_char js_text pt deriv rtx nw_obj n)
- (princ "\nSelect a polyline.")
- (while
- (null
- (setq js
- (ssget "_+.:E:S"
- (list
- '(0 . "*POLYLINE")
- (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
- (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
- )
- )
- )
- )
- (princ "\nIsn't an available object for this fonction!")
- )
- (setq
- obj (ssname js 0)
- dxf_ent (entget obj)
- ename (vlax-ename->vla-object obj)
- t_mod '+
- key "Yes"
- )
- (cond
- ((assoc 43 dxf_ent)
- (initget 6)
- (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpecify text height <" (rtos (getvar "TEXTSIZE")) ">: ")))
- (if htx (setvar "TEXTSIZE" htx))
- (setq
- AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
- Space
- (if (= 1 (getvar "CVPORT"))
- (vla-get-PaperSpace AcDoc)
- (vla-get-ModelSpace AcDoc)
- )
- )
- (cond
- ((null (tblsearch "LAYER" "Label"))
- (vlax-put (vla-add (vla-get-layers AcDoc) "Label") 'color 96)
- )
- )
- (cond
- ((null (tblsearch "STYLE" "Romand-Label"))
- (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand-Label"))
- (mapcar
- '(lambda (pr val)
- (vlax-put nw_style pr val)
- )
- (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag)
- (list "romand.shx" 0.0 (/ (* 15.0 pi) 180) 1.0 0.0)
- )
- )
- )
- (repeat 2
- (setq pr -0.5 t_char 64 js_text (ssadd))
- (if (eq key "Yes")
- (repeat (fix (vlax-curve-getEndParam ename))
- (setq
- pt (vlax-curve-GetpointAtParam ename (setq pr (1+ pr)))
- deriv (vlax-curve-getFirstDeriv ename pr)
- rtx (- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR")))
- )
- (setq nw_obj
- (vla-addMtext Space
- (vlax-3d-point (setq pt (polar pt ((eval t_mod) rtx (* pi 0.5)) (getvar "TEXTSIZE"))))
- 0.0
- (strcat
- "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
- (itoa (vla-get-ObjectID (vlax-ename->vla-object obj)))
- ">%).ConstantWidth \\f "%lu2">%"
- )
- )
- )
- (if (or (> rtx (* pi 0.5)) (< rtx (- (* pi 0.5)))) (setq rtx (+ rtx pi)))
- (mapcar
- '(lambda (pr val)
- (vlax-put nw_obj pr val)
- )
- (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation)
- (list 5 (getvar "TEXTSIZE") 5 pt "Romand-Label" "Label" rtx)
- )
- (ssadd (entlast) js_text)
- )
- )
- (if (not (eq t_mod '-))
- (progn
- (initget "Yes No")
- (if (eq (setq key (getkword "\nPut labels on other side [Yes/No]? <No>: ")) "Yes")
- (progn (setq n -1 t_mod '-) (repeat (sslength js_text) (entdel (ssname js_text (setq n (1+ n))))))
- (setq t_mod '-)
- )
- )
- )
- )
- )
- (T (princ "\nThis polyine does not have a constant width!"))
- )
- (prin1)
- )
1.我需要更改代码,使其只使用当前的文本样式,甚至询问用户应该使用哪种文本样式。它不应该要求高度,也不应该创造一种风格。
2.我还想把这个文本放在与lwpolyline相同的层上。
3.代码使用文本字段作为文本。我需要修改这个文本字段,使其采用全局宽度并将其乘以1000,并在新值之前放置前缀。即,全局宽度为0.5的pline将具有DN 500的文本标签。
我花了一些时间试图实现上述目标,但没有成功。我原以为第3条最容易修改,只需编辑文本字段的代码,但不幸的是,不是这样,否则我做错了什么。
任何帮助都将不胜感激。例如,我需要在哪里修改代码,如何修改它以及为什么需要修改它,以便我可以从中学习其他代码。
我相信这段代码对其他人也可能有用。
不幸的是,我只是没有时间在mo上花时间,因为我在mo的工作中遇到了困难。
谢谢 |