改成VLA,你试试下面的
 - ;从对齐点反算插入点
- (defun XD::TEXT:AlignPnt2InsertPnt (obj / alignment alipnt box rot)
- (setq alignment (vlax-get obj 'alignment))
- (setq alipnt (vlax-get obj 'textalignmentpoint)
- rot (vlax-get obj 'rotation)
- box (textbox (entget (vlax-vla-object->ename obj)))
- )
- (cond
- ((or
- (= alignment acAlignmentTopRight)
- (= alignment acAlignmentMiddleRight)
- (= alignment acAlignmentBottomRight)
- (= alignment acAlignmentRight)
- )
- (mapcar
- '-
- alipnt
- (list (* (cos rot) (caadr box)) (* (sin rot) (caadr box)) 0.0)
- )
- )
- ((or
- (= alignment acAlignmentCenter)
- (= alignment acAlignmentTopCenter)
- (= alignment acAlignmentMiddleCenter)
- (= alignment acAlignmentBottomCenter)
- )
- (mapcar
- '-
- alipnt
- (list (* (cos rot) (/ (caadr box) 2.0)) (* (sin rot) (/
- (caadr box)
- 2.0
- )
- ) 0.0
- )
- )
- )
- (t
- (vlax-get obj 'InsertionPoint)
- )
- )
- )
- (defun c:tt (/)
- (setq ffn "d:\\1.dwg"
- dbx (vla-GetInterfaceObject (vlax-get-acad-object) (if (<
- (setq acVer
- (atoi
- (getvar "ACADVER")
- )
- )
- 16
- )
- "ObjectDBX.AxDbDocument"
- (strcat "ObjectDBX.AxDbDocument."
- (itoa acVer)
- )
- )
- )
- )
- (Vlax-Invoke-Method dbx 'Open ffn)
- (vlax-for ob (Vlax-Get dbx 'ModelSpace) (cond
- ((= "AcDbText"
- (Vlax-Get ob 'ObjectName)
- )
- (cond
- ((= "aaa" (Vlax-Get ob 'TextString))
- (Vlax-Put ob 'TextString
- "bbbbbbbbbb"
- )
- (setq int1
- (XD::TEXT:AlignPnt2InsertPnt ob)
- )
- (vlax-put ob
- 'InsertionPoint
- int1
- )
- )
- )
- )
- )
- ) ; (vla-auditinfo dbx :vlax-true)
- (Vlax-Invoke-Method dbx 'SaveAs ffn)
- (vlax-release-object dbx)
- (princ)
- )
|