wimal 发表于 2022-7-5 16:57:42

代理对象

我怎样才能找到这些项目点的坐标。
Cad文件已上载。
代理对象。图纸

Grrr 发表于 2022-7-5 17:11:59

我只能解决这个问题(带有边界框比较的半自动):


(defun C:test ( / s sl d cen bp SS i e lst plst osm )

(setvar 'errno 0) (redraw)
(while (/= 52 (getvar 'errno))
        (princ "\nSelect source proxy entity for reference <exit>: ")
        (setq s (ssget "_+.:E:S" '((0 . "ACAD_PROXY_ENTITY"))))
        (cond
                ((= 7 (getvar 'errno)) (princ "\nMissed, try again."))
                ((= 'PICKSET (type s))
                        (setq s (ssname s 0))
                        (vla-GetBoundingBox (vlax-ename->vla-object s) 'll 'ur)
                        (setq sl (mapcar 'vlax-safearray->list (list ll ur)))
                        (setq d (apply 'distance sl))
                        (setq cen (mapcar '(lambda (a b) (/ (+ a b) 2.)) (car sl) (cadr sl)))
                        (command "_.EXPLODE" s) ; I don't want to explode it, only the proxy's basept to be snappable
                        (if (setq bp (getpoint "\nSpecify its base point for reference < exit >: " cen))
                                (progn (setq sl (list d (angle cen bp) (distance cen bp))) (grdraw cen bp 1 1) (setq plst (cons bp plst)))
                                (setq sl nil)
                        )
                        (setvar 'errno 52)
                )
                (T nil)
        ); cond
); while

(if
        (and sl
                ; (princ "\nSelect proxy objects: ")
                (setq SS (ssget "_X" (list (cons 0 "ACAD_PROXY_ENTITY")(if (= 1 (getvar 'cvport)) (cons 410 (getvar 'ctab)) '(410 . "Model")))))
        )
        (progn
                (repeat (setq i (sslength SS))
                        (setq e (ssname SS (setq i (1- i))))
                        (vla-GetBoundingBox (vlax-ename->vla-object e) 'll 'ur)
                        (setq lst (mapcar 'vlax-safearray->list (list ll ur)))
                        (if (equal (setq d (apply 'distance lst)) (car sl) 1e-8)
                                (progn
                                        (setq cen (mapcar '(lambda (a b) (/ (+ a b) 2.)) (car lst) (cadr lst)))
                                        (setq bp (polar cen (cadr sl) (caddr sl)))
                                        (setq plst (cons bp plst))
                                ); progn
                        ); if
                ); repeat
                (setq osm (getvar 'osmode))
                (setvar 'osmode 0)
                (setvar 'pdmode 35)
                (foreach x plst (entmakex (list (cons 0 "POINT") (cons 62 1) (cons 10 x)))) ; graphical check
                (princ (strcat "\nProceeded " (itoa (length plst)) " proxy objects with the same BoundingBox."))
                (setvar 'osmode osm)
        ); progn
); if
(princ)
);| defun |; (vl-load-com) (princ)



选定的源代理已分解(抱歉)。
也许其他人可以“开发”或想出更好的办法。

BIGAL 发表于 2022-7-5 17:20:33

Wimal对象是
 
AECC_点图层:“0”
空间:模型空间
手柄=472
文本位置:(321447.349944110.55,0.00)
文字旋转:
正常:(0.00,0.00,1.00)
组名称:
点数:372
点名称:
北距:9944110.55
东距:321447.34
标高:1468.81 XDRef:
原始描述:NYCS0071 XDRef:
完整描述:NYCS0071
标记位置:(321447.349944110.55,0.00)
 
因为我有CIV3D没问题,如果你用这个,你会得到什么请张贴,只是复制和粘贴到命令行。
 

(vlax-Dump-Object (vlax-Ename->Vla-Object (car (entsel))))

wimal 发表于 2022-7-5 17:35:33

谢谢Bigal先生,我用autocad 2016运行它。

wimal 发表于 2022-7-5 17:39:35

即使在civil 3d 2015中

wimal 发表于 2022-7-5 17:49:04

使用civil 3D打开后
当我选择它时,将插入点对齐。
当我移动它时,会自动生成一个指向插入点的箭头。。
但我不能得到插入点的值。
一定有人有办法。

Roy_043 发表于 2022-7-5 17:59:17

下面的代码有点风险,因为与Grrr的建议一样,使用了_Explode命令:
(defun KGA_Sys_Entlast ( / enm tmp)
(if (setq enm (entlast))
   (while (setq tmp (entnext enm))
   (setq enm tmp)
   )
)
enm
)

; (AeccDbPointInsPointGet (car (entsel)))
(defun AeccDbPointInsPointGet (enm / enmLast obj ptLst tmp)
(setq enmLast (KGA_Sys_Entlast))
(setvar 'cmdecho 0)
(command "_.explode" enm)
(while (setq tmp (entnext enmLast))
   (if (= "AcDbLine" (vla-get-objectname (setq obj (vlax-ename->vla-object tmp))))
   (setq ptLst (vl-list* (vlax-get obj 'startpoint) (vlax-get obj 'endpoint) ptLst))
   )
   (setq enmLast tmp)
)
(command "_.u")
(setvar 'cmdecho 1)
(if (= 4 (length ptLst)) (apply 'inters ptLst))
)
页: [1]
查看完整版本: 代理对象